package love_list

import "fmt"

type SingleNode struct {
	Val  int
	Next *SingleNode
}

type MyLink struct {
	dummyHead *SingleNode
}

//获取链表第index个节点的数值
//在链表的最前面插入一个节点
//在链表的最后面插入一个节点
//在链表第index个节点前面插入一个节点
//删除链表的第index个节点

// InsertAtHead 在链表的最前面插入一个节点
func (list *MyLink) InsertAtHead(val int) {
	var targetNode = &SingleNode{
		Val:  val,
		Next: nil,
	}

	cur := list.dummyHead
	next := cur.Next
	cur.Next = targetNode
	targetNode.Next = next
}

// Insert 在链表的最后面插入一个节点
func (list *MyLink) Insert(val int) {
	var targetNode = &SingleNode{
		Val:  val,
		Next: nil,
	}

	cur := list.dummyHead
	for cur.Next != nil {
		cur = cur.Next

	}
	cur.Next = targetNode
}

// GetVal 获取链表第index个节点的数值
func (list *MyLink) GetVal(index int) int {
	i := 1
	cur := list.dummyHead
	for cur.Next != nil {
		cur = cur.Next
		if i == index {
			break
		}
		i++
	}
	return cur.Val
}

// PrintLinkedList 打印链表
func (list *MyLink) PrintLinkedList() {
	cur := list.dummyHead // 设置当前节点为虚拟头节点
	for cur.Next != nil { // 遍历链表
		cur = cur.Next       // 切换到下一个节点
		fmt.Println(cur.Val) // 打印节点值
	}
}
